home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #5 & #6 / Amiga Plus CD - 1995 - No. 5 and 6.iso / tex / mf / inputs / dc / dxrlwest.mf < prev    next >
Text File  |  1994-04-12  |  50KB  |  1,127 lines

  1. % This is DXRLWEST.MF in text format, as of March 24, 1992
  2. %
  3. % DC fonts Version 1.1 (prerelease of EC fonts)
  4. %
  5. %          [ heavily borrowed from the Computer Modern Roman family of
  6. %            fonts by D. E. Knuth ]
  7. %
  8. % Content:
  9. %
  10. %   lowercase accented letters ("western part")
  11. %
  12. %   oct"340" .. oct"377"
  13. %
  14. %       oct"340"    a with gravis
  15. %       oct"341"    a with acute
  16. %       oct"342"    a with circumflex
  17. %       oct"343"    a with hacek
  18. %       oct"344"    a with hacek
  19. %       oct"345"    a with hacek
  20. %       oct"346"    ae
  21. %       oct"347"    c with cedile
  22. %
  23. %       oct"350"    e with gravis
  24. %       oct"351"    e with acute
  25. %       oct"352"    e with circumflex
  26. %       oct"353"    e with umlauts
  27. %       oct"354"    i with gravis
  28. %       oct"355"    i with acute
  29. %       oct"356"    i with circumflex
  30. %       oct"357"    i with umlaut
  31. %
  32. %       oct"360"    eth (island) d-
  33. %       oct"361"    n with tilde
  34. %       oct"362"    o with gravis
  35. %       oct"363"    o with acute
  36. %       oct"364"    o with circumflex
  37. %       oct"365"    o with tilde
  38. %       oct"366"    o with umlaut
  39. %       oct"367"    oe
  40. %
  41. %       oct"370"    o with  /
  42. %       oct"371"    u with gravis
  43. %       oct"372"    u with acute
  44. %       oct"373"    u with circumflex
  45. %       oct"374"    u with umlaut
  46. %       oct"375"    y with acute
  47. %       oct"376"    thorn
  48. %       oct"377"    eszett
  49.  
  50. dcchar "The letter gravis a";
  51. beginchar(oct"340",9u#,x_height#+acc_height#,0);
  52. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  53. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  54. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  55. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  56. if serifs: pos1(flare,180); pos2(hair,180);
  57.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  58.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  59.  bulb(3,2,1);  % bulb
  60. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  61.  pos3(1/8[vair,thin_join],90);
  62.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  63.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  64. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  65. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  66. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  67. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  68. pos7(hround(curve-2stem_corr),180);
  69. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  70. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  71. pos9(thin_join,360); z9l=z5l;
  72. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  73. {{interim superness:=more_super;
  74.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  75. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  76.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  77.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  78.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  79.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  80.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  81.   filldraw z5'l---z10l...z11l{right}--z11r
  82.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  83.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  84.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  85.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  86.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  87.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  88.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  89.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  90. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  91.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  92.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  93.  filldraw stroke z5'e--z10e; fi  % base of stem
  94. % the accent
  95. lowercase_gravis(u,0,14,15);
  96. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
  97.  
  98. dcchar "The letter acute a";
  99. beginchar(oct"341",9u#,x_height#+acc_height#,0);
  100. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  101. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  102. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  103. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  104. if serifs: pos1(flare,180); pos2(hair,180);
  105.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  106.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  107.  bulb(3,2,1);  % bulb
  108. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  109.  pos3(1/8[vair,thin_join],90);
  110.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  111.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  112. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  113. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  114. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  115. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  116. pos7(hround(curve-2stem_corr),180);
  117. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  118. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  119. pos9(thin_join,360); z9l=z5l;
  120. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  121. {{interim superness:=more_super;
  122.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  123. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  124.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  125.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  126.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  127.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  128.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  129.   filldraw z5'l---z10l...z11l{right}--z11r
  130.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  131.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  132.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  133.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  134.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  135.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  136.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  137.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  138. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  139.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  140.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  141.  filldraw stroke z5'e--z10e; fi  % base of stem
  142. % the accent
  143. lowercase_acute(0,0,14,15);
  144. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); endchar;
  145.  
  146. dcchar "The letter circumflex a";
  147. beginchar(oct"342",9u#,x_height#+acc_height#,0);
  148. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  149. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  150. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  151. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  152. if serifs: pos1(flare,180); pos2(hair,180);
  153.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  154.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  155.  bulb(3,2,1);  % bulb
  156. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  157.  pos3(1/8[vair,thin_join],90);
  158.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  159.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  160. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  161. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  162. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  163. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  164. pos7(hround(curve-2stem_corr),180);
  165. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  166. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  167. pos9(thin_join,360); z9l=z5l;
  168. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  169. {{interim superness:=more_super;
  170.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  171. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  172.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  173.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  174.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  175.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  176.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  177.   filldraw z5'l---z10l...z11l{right}--z11r
  178.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  179.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  180.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  181.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  182.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  183.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  184.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  185.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  186. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  187.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  188.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  189.  filldraw stroke z5'e--z10e; fi  % base of stem
  190. % the accent
  191. lowercase_hat(.5w,0,14,15,16,17,18);
  192. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18); endchar;
  193.  
  194.  
  195. dcchar "The letter tilde a";
  196. beginchar(oct"343",9u#,x_height#+acc_height#,0);
  197. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  198. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  199. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  200. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  201. if serifs: pos1(flare,180); pos2(hair,180);
  202.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  203.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  204.  bulb(3,2,1);  % bulb
  205. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  206.  pos3(1/8[vair,thin_join],90);
  207.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  208.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  209. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  210. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  211. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  212. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  213. pos7(hround(curve-2stem_corr),180);
  214. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  215. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  216. pos9(thin_join,360); z9l=z5l;
  217. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  218. {{interim superness:=more_super;
  219.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  220. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  221.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  222.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  223.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  224.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  225.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  226.   filldraw z5'l---z10l...z11l{right}--z11r
  227.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  228.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  229.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  230.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  231.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  232.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  233.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  234.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  235. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  236.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  237.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  238.  filldraw stroke z5'e--z10e; fi  % base of stem
  239. % the accent
  240. lowercase_tilde(0,0,14,15,16,17,18);
  241. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18); endchar;
  242.  
  243.  
  244.  
  245. dcchar "The letter umlaut a";
  246. beginchar(oct"344",9u#,x_height#+acc_height#,0);
  247. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  248. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  249. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  250. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  251. if serifs: pos1(flare,180); pos2(hair,180);
  252.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  253.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  254.  bulb(3,2,1);  % bulb
  255. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  256.  pos3(1/8[vair,thin_join],90);
  257.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  258.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  259. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  260. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  261. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  262. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  263. pos7(hround(curve-2stem_corr),180);
  264. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  265. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  266. pos9(thin_join,360); z9l=z5l;
  267. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  268. {{interim superness:=more_super;
  269.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  270. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  271.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  272.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  273.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  274.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  275.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  276.   filldraw z5'l---z10l...z11l{right}--z11r
  277.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  278.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  279.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  280.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  281.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  282.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  283.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  284.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  285. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  286.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  287.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  288.  filldraw stroke z5'e--z10e; fi  % base of stem
  289. % the accent
  290. lowercase_umlaut(0,0,14,15,16,17);
  291. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17); endchar;
  292.  
  293. dcchar "The letter circle a";
  294. beginchar(oct"345",9u#,x_height#+acc_height#,0);
  295. bh#:=min(bar_height#,1.14x_height#-bar_height#); define_pixels(bh);
  296. italcorr 1/3[bh#,x_height#]*slant+.5stem#-serif_fit#-2u#;
  297. adjust_fit(0,serif_fit# if serifs: if hair#+.5stem#>1.5u#:-.25u# fi\\fi);
  298. pickup fine.nib; top y3r=x_height+vround 1.5oo;
  299. if serifs: pos1(flare,180); pos2(hair,180);
  300.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=.5w-.5u;
  301.  y1=min(bh+.5flare+2vair+2,.9[bh,x_height]-.5flare);
  302.  bulb(3,2,1);  % bulb
  303. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  304.  pos3(1/8[vair,thin_join],90);
  305.  x3=.5w-.2u; top y1r=vround .82[bh,top y3r];
  306.  filldraw stroke term.e(3,1,left,.9,4); fi  % terminal
  307. pos4(stem,0); rt x4r=hround(w-2.5u+.5stem); y4=1/3[bh,x_height];
  308. pos5(stem,0); x5=x4; y5=max(.55bh,2vair);
  309. filldraw stroke super_arc.e(3,4)&z4e..z5e;  % arc and stem
  310. pos6(.3[thin_join,vair],90); x6=x4; bot y6=bh;
  311. pos7(hround(curve-2stem_corr),180);
  312. lft x7r=hround max(.5u,1.5u-.5curve); y7=1/3[top y8l,top y6r];
  313. pos8(vair,270); x8l=.5w-.75u; bot y8r=-oo;
  314. pos9(thin_join,360); z9l=z5l;
  315. (x,y8r)=whatever[z8l,z9l]; x8r:=max(x,x8-u);
  316. {{interim superness:=more_super;
  317.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  318. if serifs: numeric shaved_stem; shaved_stem=hround(stem-3stem_corr);
  319.  if hair#+.5stem#>1.5u#: pickup tiny.nib;
  320.   pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  321.   pos10(shaved_stem,0); x10=x5'; y10=.2[.5tiny,bh];
  322.   pos11(shaved_stem,0); rt x11r=hround(w-.25u); bot y11=0;
  323.   pos12(shaved_stem,0); x11=x12; top y12=slab+eps;
  324.   filldraw z5'l---z10l...z11l{right}--z11r
  325.    --z12r{left}...z10r+.75(z12-z11)---z5'r--cycle;  % foot
  326.  else: pickup crisp.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  327.   pos10(shaved_stem,0); x10=x5'; y10=1/3bh;
  328.   pos11(.2[vair,stem],90); x11r=.5[x10r,x12r]; bot y11l=-vround .5oo;
  329.   pos12(hair,180); rt x12l=hround(w-.1u); y12=max(y10,y11+vair);
  330.   pos13(hair,180); x13=x12; top y13=max(vround .6bh,top y12);
  331.   (x',y11l)=whatever[z11r,z12r]; x11l:=max(x',x10);
  332.   filldraw stroke z5'e---z10e...z11e{right}...z12e---z13e; fi  % hook
  333. else: numeric shaved_stem; shaved_stem=hround(stem-stem_corr);
  334.  pickup tiny.nib; pos5'(shaved_stem,0); rt x5'r=fine.rt x5r; y5'=y5;
  335.  pos10(shaved_stem,0); x10=x5'; bot y10=0;
  336.  filldraw stroke z5'e--z10e; fi  % base of stem
  337. % the accent
  338. lowercase_circle(x3,(1/3[x_height,h]+apex_o),14,15,16,17);
  339. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17); endchar;
  340.  
  341.  
  342.  
  343. dcchar "The ligature ae";
  344. beginchar(oct"346",13u#,x_height#,0);
  345. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  346. adjust_fit(0,0);
  347. numeric left_curve,right_curve;
  348. if monospace: right_curve=left_curve=fudged.stem;
  349. else: left_curve=max(tiny.breadth,hround(curve-2stem_corr));
  350. right_curve=max(tiny.breadth,hround(curve-if serifs:6
  351. else:8 fi\\stem_corr));fi
  352. pickup tiny.nib; pos11(right_curve,0);
  353. pos12(vair,90); pos13(mfudged.stem,180);
  354. y11=good.y bar_height; top y12r=h+vround 1.5oo; y10l=bot y11;
  355. rt x11r=hround min(w-.5u,w-u+.5right_curve);
  356. lft x13r=hround (.5w-.5mfudged.stem); x12=.55[x13,x11];
  357. {{interim superness:=more_super;
  358.  filldraw stroke super_arc.e(11,12)}};  % right bowl of e
  359. y13=.5[y12,y14]; bot y14r=-oo; x14=x12+.25u;
  360. if serifs: pos14(vair',270); pos15(mfudged.hair,360);
  361.  y15=max(good.y(.5bar_height-.9),y14l+vair); x15r=x11r;
  362.  (x,y14l)=whatever[z14r,z15]; x14l:=min(x,x14l+.5u);
  363.  filldraw stroke pulled_arc.e(12,13)
  364.   & pulled_super_arc.e(13,14)(.8superpull)
  365.   ...{x15-x14,5(y15-y14)}z15e; % left bowl, arc, and terminal of e
  366. else: pos14(vair,270);
  367.  filldraw stroke super_arc.e(12,13)
  368.   & super_arc.e(13,14);  % left bowl and arc of e
  369.  pickup fine.nib; pos14'(vair,270); z14=z14';
  370.  pos15(.5[vair,flare],275); rt x15r=hround(w-.6u);
  371. y15r=good.y(y15r+1/3bar_height-y15); y15l:=good.y
  372.  y15l; x15l:=good.x x15l;
  373.  filldraw stroke term.e(14',15,right,1,4); fi  % right terminal
  374. y11'r=y10r=y10l+.6[thin_join,vair]; y11'l=y10l;
  375.  x11'l=x11'r=x11; x10l=x10r=x13;
  376. fill stroke z10e--z11'e;  % crossbar
  377. pickup fine.nib; top y3r=h+vround 1.5oo;
  378. if serifs: pos1(flare,180); pos2(mfudged.hair,180);
  379.  pos3(vair,90);  lft x1r=hround max(u,2.1u-.5flare); x3=4u;
  380.  y1=min(bar_height+.5flare+2vair+2,.9[bar_height,h]-.5flare);
  381.  bulb(3,2,1);  % bulb
  382. else: pos1(5/7[vair,flare],95); x1l=good.x 1.5u; x1r:=good.x x1r;
  383.  pos3(1/8[vair,thin_join],90);
  384.  x3=4.3u; top y1r=vround .82[bar_height,top y3r];
  385.  filldraw stroke term.e(3,1,left,.9,4); fi  % left terminal
  386. pos4(mfudged.stem,0); x4=x13; y4=1/3[bar_height,h];
  387. pos5(mfudged.stem,0); x5=x4; y5=min(y4,y13);
  388. filldraw stroke super_arc.e(3,4)&z4e--z5e;  % arc and stem
  389. pos6(.6[thin_join,vair],90); x6=x4; bot y6=y10l;
  390. pos7(left_curve,180);
  391. lft x7r=hround max(.5u,1.5u-.5left_curve);
  392. y7=1/3[top y8l,top y6r];
  393. pos8(vair,270); x8l=3.75u; bot y8r=-oo;
  394. pos9(.5[vair,fudged.stem],360); x9=x5; y9=.55bar_height;
  395. (x',y8r)=whatever[z8l,z9l]; x8r:=max(x',x8-u);
  396. {{interim superness:=more_super;
  397.  filldraw stroke z9e{down}...z8e{left}...{up}z7e&super_arc.e(7,6)}}; % bowl
  398. if y9<y5:
  399. filldraw stroke z5e{down}..{down}z9e;
  400. fi  % link (usually hidden)
  401. penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
  402. endchar;
  403.  
  404.  
  405. dcchar "The letter cedilla c";
  406. beginchar(oct"347",8u#,x_height#,0.875desc_depth#);
  407. italcorr x_height#*slant-.2u#;
  408. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  409. pickup fine.nib; pos2(vair',90); pos4(vair',270);
  410. x2=x4=.5(w+u); top y2r=vround(x_height+1.5oo); bot y4r=-oo;
  411. pos3(curve,180); lft x3r=hround max(.6u,1.35u-.5curve); y3=.5x_height;
  412. if serifs: pos1(hair,0); pos0(flare,0);
  413.  y1=min(bar_height+.5flare+2vair'+2,.9[bar_height,h]-.5flare);
  414.  rt x1r=hround(w-.7u); bulb(2,1,0);  % bulb
  415.  pos5(hair,0); rt x5r=hround(w-.5u);
  416.  y5=max(good.y(.5bar_height-.9),y4l+vair');
  417.  (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u);
  418.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  419.   & pulled_super_arc.e(3,4)(.5superpull)
  420.   ..tension .9 and 1..{x5-x4,5(y5-y4)}z5e;  % arc and lower terminal
  421. else: pos1(4/7[vair',flare],80);
  422.  rt x1r=hround(w-.6u); top y1r=vround .82[bar_height,top y2r];
  423.  filldraw stroke term.e(2,1,right,.8,4);  % upper terminal
  424.  pos5(.6[vair',flare],275); rt x5r=hround(w-.5u);
  425.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  426.  forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e;
  427.   if angle direction 1 of p.e>75:
  428.    p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor
  429.  filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
  430.   & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi  % arc and lower terminal
  431. % the accent
  432. lowercase_cedilla(x4,0,6,7,8,9,10);
  433. penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar;
  434.  
  435.  
  436. dcchar "The letter gravis e";
  437. beginchar(oct"350",7.25u#+max(.75u#,.5curve#),x_height#+acc_height#,0);
  438. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  439. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  440. numeric left_curve,right_curve;
  441. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  442. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  443. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  444. pickup tiny.nib; pos1(right_curve,0);
  445. pos2(vair,90); pos3(left_curve,180);
  446. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  447. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  448. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  449. {{interim superness:=more_super;
  450.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  451. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  452. if serifs: pos4(vair',270); pos5(hair,360);
  453.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  454.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  455.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  456.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  457. else: pos4(vair,270);
  458.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  459.  pickup fine.nib; pos4'(vair,270); z4=z4';
  460.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  461.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  462.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  463. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  464. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  465. forsuffixes $=l,r:
  466.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  467. fill stroke z0e--z1'e;  % crossbar
  468. % the accent
  469. lowercase_gravis(u,0,7,8);
  470. penlabels(0,1,2,3,4,5,7,8); endchar;
  471.  
  472.  
  473. dcchar "The letter acute e";
  474. beginchar(oct"351",7.25u#+max(.75u#,.5curve#),x_height#+acc_height#,0);
  475. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  476. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  477. numeric left_curve,right_curve;
  478. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  479. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  480. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  481. pickup tiny.nib; pos1(right_curve,0);
  482. pos2(vair,90); pos3(left_curve,180);
  483. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  484. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  485. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  486. {{interim superness:=more_super;
  487.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  488. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  489. if serifs: pos4(vair',270); pos5(hair,360);
  490.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  491.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  492.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  493.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  494. else: pos4(vair,270);
  495.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  496.  pickup fine.nib; pos4'(vair,270); z4=z4';
  497.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  498.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  499.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  500. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  501. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  502. forsuffixes $=l,r:
  503.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  504. fill stroke z0e--z1'e;  % crossbar
  505. % the accent
  506. lowercase_acute(if monospace:0 else: -u fi,0,7,8);
  507. penlabels(0,1,2,3,4,5,7,8); endchar;
  508.  
  509. dcchar "The letter circumflex e";
  510. beginchar(oct"352",7.25u#+max(.75u#,.5curve#),x_height#+acc_height#,0);
  511. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  512. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  513. numeric left_curve,right_curve;
  514. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  515. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  516. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  517. pickup tiny.nib; pos1(right_curve,0);
  518. pos2(vair,90); pos3(left_curve,180);
  519. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  520. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  521. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  522. {{interim superness:=more_super;
  523.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  524. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  525. if serifs: pos4(vair',270); pos5(hair,360);
  526.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  527.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  528.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  529.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  530. else: pos4(vair,270);
  531.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  532.  pickup fine.nib; pos4'(vair,270); z4=z4';
  533.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  534.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  535.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  536. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  537. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  538. forsuffixes $=l,r:
  539.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  540. fill stroke z0e--z1'e;  % crossbar
  541. % the accent
  542. lowercase_hat(.5w,0,7,8,9,10,11);
  543. penlabels(0,1,2,3,4,5,7,8); endchar;
  544.  
  545.  
  546. dcchar "The letter umlaut e";
  547. beginchar(oct"353",7.25u#+max(.75u#,.5curve#),x_height#+acc_height#,0);
  548. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  549. adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
  550. numeric left_curve,right_curve;
  551. left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
  552. if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
  553. if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
  554. pickup tiny.nib; pos1(right_curve,0);
  555. pos2(vair,90); pos3(left_curve,180);
  556. y1=good.y bar_height; top y2r=x_height+vround 1.5oo; y0l=bot y1;
  557. rt x1r=hround min(w-.5u,w-u+.5right_curve);
  558. lft x3r=hround max(.5u,1.25u-.5left_curve); x2=.5w+.25u;
  559. {{interim superness:=more_super;
  560.  filldraw stroke super_arc.e(1,2)}};  % right bowl
  561. y3=.5[y2,y4]; bot y4r=-oo; x4=x2+.25u;
  562. if serifs: pos4(vair',270); pos5(hair,360);
  563.  y5=max(good.y(.5bar_height-.9),y4l+vair); x5r=x1r;
  564.  (x,y4l)=whatever[z4r,z5]; x4l:=min(x,x4l+.5u);
  565.  filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
  566.   ...{x5-x4,5(y5-y4)}z5e; % left bowl, arc, and terminal
  567. else: pos4(vair,270);
  568.  filldraw stroke super_arc.e(2,3) & super_arc.e(3,4);  % left bowl and arc
  569.  pickup fine.nib; pos4'(vair,270); z4=z4';
  570.  pos5(.5[vair,flare],275); rt x5r=hround(w-.6u);
  571.  y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
  572.  filldraw stroke term.e(4',5,right,1,4); fi  % terminal
  573. path testpath; testpath=super_arc.r(2,3) & super_arc.r(3,4);
  574. y1'r=y0r=y0l+.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
  575. forsuffixes $=l,r:
  576.  x0$=xpart(((0,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
  577. fill stroke z0e--z1'e;  % crossbar
  578. % the accent
  579. lowercase_umlaut(0,0,7,8,9,10);
  580. penlabels(0,1,2,3,4,5,7,8,9,10); endchar;
  581.  
  582. dcchar "letter gravis i";
  583. beginchar(oct"354",5u#,x_height#+acc_height#,0);
  584. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  585. adjust_fit(serif_fit#+stem_shift#
  586.    if monospace:+.25u#fi,serif_fit#-stem_shift#);
  587. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  588. if odd(w-stem'): change_width; fi
  589. lft x1l=hround(.5w-.5stem'); x1=x2;
  590. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  591. filldraw stroke z1e--z2e;  % stem
  592. if serifs: sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  593.  dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  594. % the accent
  595. lowercase_gravis(if serifs: 0 else:.5u fi,0,3,4);
  596. penlabels(1,2,3,4); endchar;
  597.  
  598.  
  599. dcchar "letter acute i";
  600. beginchar(oct"355",5u#,x_height#+acc_height#,0);
  601. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  602. adjust_fit(serif_fit#+stem_shift#
  603.    if monospace:+.25u#fi,serif_fit#-stem_shift#);
  604. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  605. if odd(w-stem'): change_width; fi
  606. lft x1l=hround(.5w-.5stem'); x1=x2;
  607. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  608. filldraw stroke z1e--z2e;  % stem
  609. if serifs: sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  610.  dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  611. % the accent
  612. lowercase_acute(0,0,3,4);
  613. penlabels(1,2,3,4); endchar;
  614.  
  615.  
  616. dcchar "letter circumflex i";
  617. beginchar(oct"356",5u#,x_height#+acc_height#,0);
  618. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  619. adjust_fit(serif_fit#+stem_shift#
  620.    if monospace:+.25u#fi,serif_fit#-stem_shift#);
  621. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  622. if odd(w-stem'): change_width; fi
  623. lft x1l=hround(.5w-.5stem'); x1=x2;
  624. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  625. filldraw stroke z1e--z2e;  % stem
  626. if serifs: sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  627.  dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  628. % the accent
  629. lowercase_hat(x1,0,3,4,5,6,7);
  630. penlabels(1,2,3,4,5,6,7); endchar;
  631.  
  632.  
  633. dcchar "letter umlaut i";
  634. beginchar(oct"357",5u#,x_height#+acc_height#,0);
  635. italcorr (x_height#+acc_height#)*slant-serif_fit#+.5stem#-2u#;
  636. adjust_fit(0.5u#+serif_fit#+stem_shift#
  637.    if monospace:+.25u#fi,0.5u#+serif_fit#-stem_shift#);
  638. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  639. if odd(w-stem'): change_width; fi
  640. lft x1l=hround(.5w-.5stem'); x1=x2;
  641. top y1=x_height if serifs: +min(oo,serif_drop) fi; bot y2=0;
  642. filldraw stroke z1e--z2e;  % stem
  643. if serifs: sloped_serif.l(1,2,a,1/3,.95jut,serif_drop);  % upper serif
  644.  dish_serif(2,1,b,1/3,jut,c,1/3,.9jut); fi  % lower serif
  645. % the accent
  646. lowercase_umlaut(0,0,3,4,5,6);
  647. penlabels(1,2,3,4,5,6); endchar;
  648.  
  649. dcchar "The letter eth";
  650. beginchar(oct"360",9u#,asc_height#,0);
  651. italcorr .7x_height#*slant + u ;
  652. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  653. oh := vround x_height ;
  654. penpos1(vair,90); penpos3(vair',-90);
  655. penpos2(curve,180); penpos4(curve,0);  penpos4'(hair,0) ;
  656. x2r=hround max(.5u,1.25u-.5curve);
  657. x4r=w-x2r; x1=x3=.5w; y1r=oh + vround 1.5oo; y3r=-oo;
  658. y2=y4=.5oh-vair_corr; y2l:=y4l:=.52oh;
  659. x4'l = x4l ; y4 = y4' ;
  660. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  661.  & pulled_arc.e(3,4) -- pulled_arc.e(4',1) & cycle;  % bowl
  662. fill z4l .. {right}z4 -- z4r -- cycle ; % fill in a little gap!
  663. penpos5(.5[vair,hair],40) ;
  664. % x5 = 3u ; top y5r = h ; Breytt JP
  665. x5l = x2 ; top y5r = h ;
  666.  
  667. x7r = x4r;
  668. y7 = .95[x4,x1];
  669. penpos7(curve,0);
  670. penstroke z5e .. tension 1.1 and 0.9 .. z7e{down} .. z4e ;
  671. %penstroke z5e .. tension 1.1 and 0.9 .. z4e{down} ;
  672.  
  673. path p ;
  674. p = z5 .. tension 1.1 and 0.9 .. z7{down} ;
  675. %z6 = ((0,.6[x_height,asc_height]) -- (w,.5[x_height,asc_height])) JP
  676. z6 = ((0,.7[x_height,asc_height]) -- (w,.6[x_height,asc_height]))
  677.      intersectionpoint p ;
  678. penpos6'(.5[vair,hair],-60) ; penpos 6''(.5[vair,hair],-60) ;
  679. top y6''l = h ; z6'' = z6 + whatever*dir30;
  680. z6 = .5[z6',z6''] ; filldraw stroke z6'e -- z6''e ;
  681. penlabels(1,2,3,4,5,6,6',6''); endchar;
  682.  
  683.  
  684. % previous version:
  685.  
  686. %dcchar "The letter eth";
  687. %beginchar(oct"360",9u#,asc_height#,0);
  688. %italcorr .7x_height#*slant;
  689. %adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  690. %penpos1(vair,90); penpos3(vair',-90);
  691. %penpos2(curve,180); penpos4(curve,0);
  692. %penpos5(0.7curve,70);
  693. %penpos6(0.7curve,0);
  694. %penpos4'(0.7curve,0);
  695. %z4=z4';
  696. %x6r=x4r;y6=.2[y4,x_height];
  697. %x5=x2;
  698. %y5r=h;
  699. %x2r=hround max(.5u,1.25u-.5curve);
  700. %x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  701. %y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  702. %penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  703. % & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  704. %pickup fine.nib;
  705. %%filldraw stroke z4'e..z6e{up}..z5e;
  706. %penstroke pulled_arc.e(4,6);
  707. %penstroke pulled_arc.e(6,5);
  708. %z7=point 1.4 of path_.l;
  709. %z20=point 1.4 of path_.r;
  710. %z21=.5[z7,z20];
  711. %%x7  :=xpart(point 1.65 of (z4'..z6{up}..z5));
  712. %%y7  :=ypart(point 1.65 of (z4'..z6{up}..z5));
  713. %%x11 :=xpart(point 1.8 of (z4'..z6{up}..z5));
  714. %%y11 :=ypart(point 1.8 of (z4'..z6{up}..z5));
  715. %numeric aaa;
  716. %aaa := (angle direction 1.4 of path_.l)-90;
  717. %%z8=z7-(1stem,1stem);
  718. %y8=.4[y21,x_height];
  719. %z8=whatever[z21,z21+dir aaa];
  720. %pos8(bar,aaa-90);
  721. %pos9(bar,aaa-90);
  722. %0.5[z8,z9]=z21;
  723. %filldraw stroke z8e--z9e;
  724. %if serifs:
  725. %    pos10(vair,110);
  726. %    z10r=whatever[z5l,z5r];
  727. %    y10=.6[x_height,y5];
  728. %    pos11(vair,110);
  729. %    z11r=whatever[z5l,z5r];
  730. %    x11=x5;
  731. %    filldraw stroke z10e--z11e;
  732. %%   pos11(0.7curve,70);
  733. %%   pos10(vair,110);% angle(z5r-z5l)-90);
  734. %%   z10r=whatever[z5l,z5r];
  735. %%   y10=.5[x_height,y5];
  736. %%   arm(11,10,f,beak_darkness,0);
  737. %fi
  738. %penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  739.  
  740. dcchar "The letter tilde n";
  741. beginchar(oct"361",10u#,x_height#+acc_height#,0);
  742. italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#;
  743. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  744. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  745. numeric shaved_stem; shaved_stem=hround(stem-2stem_corr);
  746. pos1'(shaved_stem,0); pos2'(shaved_stem,0); pos3(stem,0);
  747. lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; x3=w-x1;
  748. top y1=x_height+min(oo,serif_drop); bot y2=0; y1=y1'; y2=y2';
  749. filldraw stroke z1'e--z2'e;  % left stem
  750. h_stroke(2,a,3,4);  % arch and right stem
  751. if serifs: sloped_serif.l(1',2',b,1/3,jut,serif_drop); % upper left serif
  752.  numeric inner_jut; pickup tiny.nib;
  753.  if rt x2r+jut+.5u+1<=lft x4l-jut: inner_jut=jut;
  754.  else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi
  755.  dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower left serif
  756.  dish_serif(4,3,e,1/3,inner_jut,f,1/3,jut); fi % lower right serif
  757. % the accent
  758. lowercase_tilde(0,0,5,6,7,8,9);
  759. penlabels(1,2,3,4,5,6,7,8,9); endchar;
  760.  
  761.  
  762. dcchar "The letter gravis o";
  763. beginchar(oct"362",9u#,x_height#+acc_height#,0);
  764. italcorr .7x_height#*slant;
  765. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  766. penpos1(vair,90); penpos3(vair',-90);
  767. penpos2(curve,180); penpos4(curve,0);
  768. x2r=hround max(.5u,1.25u-.5curve);
  769. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  770. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  771. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  772.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  773. % the accent
  774. lowercase_gravis(u,0,5,6);
  775. penlabels(1,2,3,4,5,6); endchar;
  776.  
  777.  
  778. dcchar "The letter acute o";
  779. beginchar(oct"363",9u#,x_height#+acc_height#,0);
  780. italcorr .7x_height#*slant;
  781. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  782. penpos1(vair,90); penpos3(vair',-90);
  783. penpos2(curve,180); penpos4(curve,0);
  784. x2r=hround max(.5u,1.25u-.5curve);
  785. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  786. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  787. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  788.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  789. % the accent
  790. lowercase_acute(0,0,5,6);
  791. penlabels(1,2,3,4,5,6); endchar;
  792.  
  793.  
  794.  
  795. dcchar "The letter circumflex o";
  796. beginchar(oct"364",9u#,x_height#+acc_height#,0);
  797. italcorr .7x_height#*slant;
  798. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  799. penpos1(vair,90); penpos3(vair',-90);
  800. penpos2(curve,180); penpos4(curve,0);
  801. x2r=hround max(.5u,1.25u-.5curve);
  802. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  803. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  804. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  805.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  806. % the accent
  807. lowercase_hat(x1,0,5,6,7,8,9);
  808. penlabels(1,2,3,4,5,6,7,8,9); endchar;
  809.  
  810. dcchar "The letter tilde o";
  811. beginchar(oct"365",9u#,x_height#+acc_height#,0);
  812. italcorr .7x_height#*slant;
  813. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  814. penpos1(vair,90); penpos3(vair',-90);
  815. penpos2(curve,180); penpos4(curve,0);
  816. x2r=hround max(.5u,1.25u-.5curve);
  817. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  818. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  819. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  820.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  821. % the accent
  822. lowercase_tilde(0,0,5,6,7,8,9);
  823. penlabels(1,2,3,4,5,6,7,8,9);endchar;
  824.  
  825.  
  826.  
  827. dcchar "The letter umlaut o";
  828. beginchar(oct"366",9u#,x_height#+acc_height#,0);
  829. italcorr .7x_height#*slant;
  830. adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
  831. penpos1(vair,90); penpos3(vair',-90);
  832. penpos2(curve,180); penpos4(curve,0);
  833. x2r=hround max(.5u,1.25u-.5curve);
  834. x4r=w-x2r; x1=x3=.5w; y1r=x_height+vround 1.5oo; y3r=-oo;
  835. y2=y4=.5x_height-vair_corr; y2l:=y4l:=.52x_height;
  836. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  837.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  838. % the accent
  839. lowercase_umlaut(0,0,5,6,7,8);
  840. penlabels(1,2,3,4,5,6,7,8); endchar;
  841.  
  842. dcchar "The ligature oe";
  843. beginchar(oct"367",14u#,x_height#,0);
  844. italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
  845. adjust_fit(0,0);
  846. numeric left_curve,right_curve;
  847. if monospace: right_curve=left_curve=fudged.stem;
  848. else: left_curve=max(fine.breadth,hround(curve-2stem_corr));
  849.  right_curve=max(tiny.breadth,hround(curve-if serifs:6 else:8 fi\\stem_corr));fi
  850. pickup tiny.nib; pos11(right_curve,0);
  851. pos12(vair,90); pos13(mfudged.stem,180);
  852. y11=good.y bar_height; top y12r=h+vround 1.5oo; y10l=bot y11;
  853. rt x11r=hround min(w-.5u,w-u+.5right_curve);
  854. lft x13r=hround (.5(w+u)-.5mfudged.stem); x12=.55[x13,x11];
  855. {{interim superness:=more_super;
  856.  filldraw stroke super_arc.e(11,12)}};  % right bowl of e
  857. y13=.5[y12,y14]; bot y14r=-oo; x14=x12+.25u;
  858. if serifs: pos14(vair',270); pos15(mfudged.hair,360);
  859.  y15=max(good.y(.5bar_height-.9),y14l+vair); x15r=x11r;
  860.  (x,y14l)=whatever[z14r,z15]; x14l:=min(x,x14l+.5u);
  861.  filldraw stroke pulled_arc.e(12,13)
  862.   & pulled_super_arc.e(13,14)(.8superpull)
  863.   ...{x15-x14,5(y15-y14)}z15e; % left bowl, arc, and terminal of e
  864. else: pos14(vair,270);
  865.  filldraw stroke super_arc.e(12,13)
  866.   & super_arc.e(13,14);  % left bowl and arc of e
  867.  pickup fine.nib; pos14'(vair,270); z14=z14';
  868.  pos15(.5[vair,flare],275); rt x15r=hround(w-.6u);
  869.  y15r=good.y(y15r+1/3bar_height-y15); y15l:=good.y y15l; x15l:=good.x x15l;
  870.  filldraw stroke term.e(14',15,right,1,4); fi  % terminal
  871. y11'r=y10r=y10l+.6[thin_join,vair]; y11'l=y10l; x11'l=x11'r=x11; x10l=x10r=x13;
  872. fill stroke z10e--z11'e;  % crossbar
  873. pickup fine.nib; pos1(vair,90); pos3(vair,-90);
  874. pos2(left_curve,180); pos4(mfudged.stem,0);
  875. lft x2r=hround max(.5u,1.25u-.5curve);
  876. z4=z13; x1=x3=.5[x2,x4]; top y1r=h+vround 1.5oo; bot y3r=-oo;
  877. y2=y4; y2l:=y4l:=.52h;
  878. filldraw stroke pulled_arc.e(1,2) & pulled_arc.e(2,3); % left half of left bowl
  879. filldraw stroke pulled_arc.e(3,4) & pulled_arc.e(4,1); % right half of left bowl
  880. penlabels(1,2,3,4,10,11,12,13,14,15); endchar;
  881.  
  882.  
  883. dcchar "Scandinavian letter o/slash";
  884. beginchar(oct"370",9u#,x_height#+.5desc_depth#,.5desc_depth#);
  885. italcorr h#*slant-u#-max(.5fudge*stem#,.75u#)+.5vair#;
  886. adjust_fit(0,0);
  887. penpos1(vair,90); penpos3(vair,-90);
  888. penpos2(fudged.stem,180); penpos4(fudged.stem,0);
  889. x2r=hround max(.5u,1.25u-.5fudged.stem);
  890. x4r=w-x2r; x1=x3=.5w;
  891. y1r=x_height+vround 1.5oo; y2=y4=.5x_height-vair_corr; y3r=-oo;
  892. penstroke pulled_arc.e(1,2) & pulled_arc.e(2,3)
  893.  & pulled_arc.e(3,4) & pulled_arc.e(4,1) & cycle;  % bowl
  894. x5=x4; x6=x2; y5=h; y6=-d;
  895. numeric theta; theta=angle(z5-z6)-90;
  896. pickup crisp.nib; pos5(vair,theta); pos6(vair,theta);
  897. filldraw stroke z5e--z6e;  % diagonal
  898. penlabels(1,2,3,4,5,6); endchar;
  899.  
  900. dcchar "The letter gravis u";
  901. beginchar(oct"371",10u#,x_height#+acc_height#,0);
  902. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  903. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  904. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  905. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  906. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  907. pos3(stem,0); pos4(stem',0);
  908. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  909. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  910. else: top y1=x_height; bot y4=0; fi
  911. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  912. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  913. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  914. y6=y0=2/3bar_height;
  915. filldraw stroke z1e--z2e;  % left stem
  916. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  917. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  918. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  919. filldraw stroke {{interim superness:=hein_super;
  920.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  921. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  922.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  923.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  924. % the accent
  925. lowercase_gravis(if monospace: 0 else: u fi,0,7,8);
  926. penlabels(1,2,3,4,5,6,7,8); endchar;
  927.  
  928.  
  929. dcchar "The letter acute u";
  930. beginchar(oct"372",10u#,x_height#+acc_height#,0);
  931. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  932. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  933. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  934. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  935. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  936. pos3(stem,0); pos4(stem',0);
  937. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  938. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  939. else: top y1=x_height; bot y4=0; fi
  940. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  941. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  942. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  943. y6=y0=2/3bar_height;
  944. filldraw stroke z1e--z2e;  % left stem
  945. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  946. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  947. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  948. filldraw stroke {{interim superness:=hein_super;
  949.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  950. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  951.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  952.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  953. % the accent
  954. lowercase_acute(if monospace: 0 else: 0 fi,0,7,8);
  955. penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  956.  
  957.  
  958. dcchar "The letter circumflex (hat) u";
  959. beginchar(oct"373",10u#,x_height#+acc_height#,0);
  960. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  961. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  962. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  963. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  964. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  965. pos3(stem,0); pos4(stem',0);
  966. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  967. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  968. else: top y1=x_height; bot y4=0; fi
  969. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  970. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  971. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  972. y6=y0=2/3bar_height;
  973. filldraw stroke z1e--z2e;  % left stem
  974. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  975. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  976. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  977. filldraw stroke {{interim superness:=hein_super;
  978.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  979. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  980.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  981.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  982. % the accent
  983. lowercase_hat(.5[x1,x3],0,7,8,9,10,11);
  984. penlabels(1,2,3,4,5,6,7,8,9,10,11); endchar;
  985.  
  986.  
  987. dcchar "The letter umlaut u";
  988. beginchar(oct"374",10u#,x_height#+acc_height#,0);
  989. italcorr x_height#*slant-serif_fit#+.5stem#-2u#;
  990. adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#);
  991. numeric light_vair; light_vair=vair if hefty: -vround 2vair_corr fi;
  992. if light_vair<fine.breadth: light_vair:=fine.breadth; fi
  993. pickup tiny.nib; pos1(stem,0); pos2(stem,0);
  994. pos3(stem,0); pos4(stem',0);
  995. lft x1l=hround(2.5u-.5stem); x1=x2; x3=w-x1; x3r=x4r;
  996. if serifs: top y1=x_height+min(oo,serif_drop); bot y4=-min(oo,serif_drop);
  997. else: top y1=x_height; bot y4=0; fi
  998. pos0(stem,0); pos0'(stem',0); x0=x3; x0'=x4; y0=y0';
  999. penpos2'(stem-fine,-180); z2'=z2; y3=y1; y2=.5bar_height;
  1000. penpos5(max(eps,light_vair-fine),-90); penpos6(thin_join-fine,0);
  1001. y6=y0=2/3bar_height;
  1002. filldraw stroke z1e--z2e;  % left stem
  1003. filldraw stroke z3e..z0e--z0'e..z4e;  % right stem
  1004. pickup fine.nib; bot y5r=-oo; x5l=.5w-.25u; lft x6l=tiny.lft x0l;
  1005. (x,y5r)=whatever[z5l,z6l]; x5r:=max(x,.5[x5,x2'r]);
  1006. filldraw stroke {{interim superness:=hein_super;
  1007.   pulled_arc.e(2',5)}} & z5e{right}...{up}z6e;  % arc
  1008. if serifs: sloped_serif.l(1,2,a,1/3,jut,serif_drop); % upper left serif
  1009.  sloped_serif.l(3,0,b,1/3,jut,serif_drop); % upper right serif
  1010.  sloped_serif.r(4,0',c,1/3,jut,min(oo,serif_drop)); fi % lower right serif
  1011. % the accent
  1012. lowercase_umlaut(0,0,7,8,9,10);
  1013. penlabels(1,2,3,4,5,6,7,8,9,10); endchar;
  1014.  
  1015. dcchar "The letter acute y";
  1016. beginchar(oct"375",if serifs:9.5u# else:9u# fi,x_height#+acc_height#,desc_depth#);
  1017. italcorr x_height#*slant+.25u#;
  1018. adjust_fit(serif_fit# if monospace:+\\.5u#,.5u#+ else:,fi\\ serif_fit#);
  1019. numeric left_stem,right_stem,bot_stem,bot_vair,outer_jut;
  1020. left_stem=fudged.stem-stem_corr;
  1021. right_stem=fudged.hair if hefty:-2stem_corr fi;
  1022. bot_stem=fudged.hair if hefty:-8stem_corr fi;
  1023. bot_vair=Vround(if serifs: vair else:.5[vair,bot_stem] fi);
  1024. outer_jut=.75jut;
  1025. x1l=w-x4r=l+letter_fit+outer_jut+.25u; y1=y4r=x_height; y2=y3=0; x2l=x3l;
  1026. numeric alpha,alpha[]; x9=3u; y9=bot_vair-d-oo;
  1027. alpha1=diag_ratio(2,bot_stem,y1-y3,x4r-x1l-apex_corr);
  1028. alpha2=diag_ratio(1,bot_stem,y1-y9,x4r-x9);
  1029. if alpha1<alpha2: x2l-x1l=x4r-x3r+apex_corr; alpha=alpha1;
  1030. else: alpha=alpha2; z3l=whatever[z9,z4r-(alpha*bot_stem,0)]; fi
  1031. penpos3(alpha*bot_stem,0); penpos4(alpha*right_stem,0);
  1032. alpha3=(y1++(x2l-x1l))/y1;
  1033. penpos1(alpha3*left_stem,0); penpos2(alpha3*left_stem,0);
  1034. z0=whatever[z1r,z2r]=z4l+whatever*(z3r-z4r);
  1035. if y0>notch_cut: y0:=notch_cut;
  1036.   fill z0+.5right{up}...{z4r-z3r}diag_end(0,4l,1,1,4r,3r)
  1037.     --z3r--z2l--diag_end(2l,1l,1,1,1r,2r){z2-z1}
  1038.     ...{down}z0+.5left--cycle; % left and right diagonals
  1039. else: fill z0--diag_end(0,4l,1,1,4r,3r)--z3r--z2l
  1040.     --diag_end(2l,1l,1,1,1r,0)--cycle; fi % left and right diagonals
  1041. penpos5(alpha*bot_stem,0); z5r=whatever[z3r,z4r]; y5-.5vair=-.5d;
  1042. if serifs: numeric light_bulb; light_bulb=hround 7/8[hair,flare]; clearpen;
  1043.  penpos6(vair,-90); penpos7(hair,-180); penpos8(light_bulb,-180);
  1044.  x6=2u; y6r=-d-oo; y8-.5light_bulb=-.85d; x8r=hround .35u;
  1045.  fill stroke z3e---z5e...{left}z6e; bulb(6,7,8);  % arc and bulb
  1046.  numeric inner_jut; pickup tiny.nib;
  1047.  prime_points_inside(1,2); prime_points_inside(4,3);
  1048.  if rt x1'r+jut+.5u+1<=lft x4'l-jut: inner_jut=jut;
  1049.  else: rt x1'r+inner_jut+.5u+1=lft x4'l-inner_jut; fi
  1050.  dish_serif(1',2,a,1/3,outer_jut,b,1/2,inner_jut);  % left serif
  1051.  dish_serif(4',3,c,.6,inner_jut,d,1/2,outer_jut)(dark);  % right serif
  1052. else: penpos6(bot_vair,-90); x6=2.5u; y6r=-d-oo;
  1053.  fill stroke z3e---z5e...{left}z6e;  % arc
  1054.  pickup fine.nib; pos6'(bot_vair,-90); z6'=z6;
  1055.  pos7(2/3[bot_vair,flare],-85);
  1056.  lft x7l=hround u; bot y7r=vround-.96d-oo; y7l:=good.y y7l;
  1057.  filldraw stroke term.e(6',7,left,1,4); fi % arc and terminal
  1058. % the accent
  1059. lowercase_acute(0,0,10,11);
  1060. penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;
  1061.  
  1062.  
  1063. dcchar "The letter thorn";
  1064. beginchar(oct"376",10u#+serif_fit#,asc_height#,desc_depth#);
  1065. italcorr .5x_height#*slant+min(.5curve#-u#,-.25u#);
  1066. adjust_fit(serif_fit#,0);
  1067. pickup tiny.nib; pos1(stem',0); pos2(stem,0);
  1068. pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
  1069. lft x1l=hround(2.5u-.5stem'); top y1=h;
  1070. numeric edge; edge=rt x2r;
  1071. pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
  1072. pos4(vair,90); pos5(curve,0); pos6(vair,-90); penpos7(x3l-x3r,-180);
  1073. rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l),1/3[rt x2,edge]);
  1074. y3=1/8[bar_height,x_height];
  1075. x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
  1076. rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
  1077. x6l=x4l-.2u; bot y6r=-oo;
  1078. x7=x3; y7=min(y3,y6+y4-y3+.6vair);
  1079. (x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x4,x5r]);
  1080. (x',y6r)=whatever[z7l,z6l]; x6r:=min(x',.5[x6,x5r]);
  1081. filldraw stroke z3e{up}...pulled_arc.e(4,5)&pulled_arc.e(5,6)...{up}z7e; % bowl
  1082. y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{right}z4l));
  1083. y2=ypart(((edge,h)--(edge,0))intersectionpoint(z6l{left}...{up}z7l));
  1084. pickup tiny.nib; filldraw stroke z1e--z0'e--z0e--z2e;  % stem
  1085. pickup crisp.nib; pos8(stem,0); pos7'(stem,0);
  1086. z7'=z2; x8l=x7'l; bot y8=-d;
  1087. filldraw stroke z7'e--z8e;  % point
  1088. if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif
  1089.  dish_serif(8,1,c,1/3,jut,d,1/3,jut); % lower serif
  1090.  fi  % upper serif
  1091. penlabels(0,1,2,3,4,5,6,7,8); endchar;
  1092.  
  1093.  
  1094. dcchar "German letter es-zet (sharp s)";
  1095. beginchar(oct"377",4.5u#+max(4.5u#,.5stem#+flare#+curve#),asc_height#,0);
  1096. italcorr asc_height#*slant-u#;
  1097. adjust_fit(serif_fit#,0);
  1098. pickup tiny.nib; pos1(stem',0); pos2(stem',0);
  1099. lft x1l=lft x2l=hround(2.5u-.5stem'); bot y1=0; y2=y4=.5[x_height,y3];
  1100. penpos3(vair-fine,90); fine.top y3r=h+oo;
  1101. filldraw stroke z1e--z2e;  % stem
  1102. numeric stem_edge,curve'; stem_edge=rt x1r; curve'=hround .5[stem',curve];
  1103. pickup fine.nib; pos4(curve',0); pos5(vair,-90);
  1104. pos2'(stem',180); z2'=z2; x3=.5[x2,x4]; rt x4r=hround(w-u);
  1105. top y5l=x_height; lft x5=min(lft x4l,hround(stem_edge+u));
  1106. filldraw stroke pulled_super_arc.e(2',3)(.5superpull)
  1107.  & pulled_super_arc.e(3,4)(.5superpull)
  1108.  & pulled_super_arc.e(4,5)(.5superpull);  % upper bowl
  1109. pos5'(vair,90); z5'=z5; pos6(curve',0); pos7(vair,-90);
  1110. rt x6r=hround(w-.5u)+3eps; y6=.4x_height; bot y7r=-oo;
  1111. if serifs: pos8(hair,-180) else: pos8(vair,-110) fi;
  1112. lft x8r=min(hround(stem_edge+.5u+1),lft x8r+x6r-2eps-x8l);
  1113. x7=max(x8l+eps,.4[lft x8r,x6]);
  1114. filldraw stroke pulled_super_arc.e(5',6)(.5superpull)
  1115.  & pulled_super_arc.e(6,7)(.5superpull);  % lower bowl
  1116. if serifs: pos9(5/7[vair,flare],-180);
  1117.  y9-(x9-lft x9r)=vround .07x_height; bulb(7,8,9);  % bulb
  1118.  penpos0(stem'-tiny,0); x0=x1; tiny.top y0=x_height;
  1119.  serif(0,1,a,0,-jut);  % bar
  1120.  dish_serif(1,2,b,1/3,jut,c,0,epsilon);  % serif
  1121. else: bot y8r=vround .01h; x8l:=good.x x8l; y8l:=good.y(y8l+.5);
  1122.  filldraw stroke term.e(7,8,left,1,4); fi  % terminal
  1123. penlabels(0,1,2,3,4,5,6,7,8,9); endchar;
  1124.  
  1125. endinput;
  1126.  
  1127.